// 然后我们在这里把两个接口实现
// 首先是 获取 qrcode 也就是二维码
const getQrcode = async (request: any, response: any) => {
  let resJSON: ResponseDataType = {
    code: -1,
    note: '获取二维码失败',
    data: [],
    total: -1,
  }
  let result = await fetch('https://passport.bilibili.com/x/passport-login/web/qrcode/generate', {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
    },
  })
  // 打印了一个请求，一个promise类型的数据
  // 需要在await 一下
  // 发现，和我们直接请求b站的二维码也即是我们在aio中直接请求的二维码是一样的，对不对嗯
  // 其实咱们获取成功了，但是结果不是很对，因为我们返回的数据是，实际的结果是，所以 data【0】 才是我们真实地数据嗯，好，接下来对结果进行处理使得跟我们的项目一致
  let data = await result.json()
  // code == 0 表示成功
  if (data.code == 0) {
    // 成功后，我们提取出二维码链接和qrkey
    let _data0 = {
      ...data.data,
    }
    resJSON.code = 1 // 成功 code 就等于1 失败的话就不赋值，也就是原始值，也就是-1
    resJSON.note = data.message == '0' ? '获取二维码成功' : data.message // 然后把提示信息也交给 resJSON
    resJSON.data[0] = _data0 // 然后把这个数据交给 resJSON.data
  }
  response.send(resJSON) // 从结果上来看，成功了；当然不可能不成功毕竟我自己试了一下。。笑鼠啊。
}

// 接下来，是我们的重头戏，因为这个登录我也没试
const login = async (queryParams: any, response: any) => {
  let resJSON: ResponseDataType = {
    code: -1,
    note: '',
    data: [],
    total: -1,
  }
  // get 方法参数转换成urlget请求字符串 让ai提示一下嘿嘿
  let paramStr = ''
  for (let key in queryParams) {
    let value = queryParams[key]
    paramStr += key + '=' + value + '&'
  }
  let result = await fetch('https://passport.bilibili.com/x/passport-login/web/qrcode/poll?' + paramStr, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
    },
  })

  let data: any = await result.json()
  console.log(data)
  data = data.data || {}
  // code == 86038 表示二维码过期
  let localhostCookie: string = ''
  if (data.code != 86038) {
    localhostCookie = result.headers.get('set-cookie')?.replaceAll('Domain=bilibili.com', 'Domain=localhost') || ''
    if (data.code == 0) {
      resJSON.code = 1
    } else {
      resJSON.code = data.code
    }
    resJSON.note = data.message
    resJSON.data[0] = {
      url: data.url,
      refresh_token: data.refresh_token,
      timestamp: data.timestamp,
      cookie: localhostCookie, // 真是费劲啊这就是b站返回的原本的cookie是吧对的，直接把它当做数据存起来得了
    }
  } else {
    resJSON.code = -1
    resJSON.note = data.message
  }
  console.log('localhostCookie', localhostCookie)
  response.setHeader('set-cookie', localhostCookie)
  console.log(response.headers)
  response.setHeader("Access-Control-Allow-Origin", 'http://localhost:5090') //如果要发送Cookie，就不能设为星号，必须指定明确的、与请求网页一致的域名
  response.setHeader("Access-Control-Allow-Credentials", true)
  response.send(resJSON) // 这里是不是就解决啦，然后同样的，我们对数据进行一波处理，只需要知道当前二维码是否失效就行，其他的code什么的原封不动返回行吧
  // 虽然我们解决了数据请求的问题，但是还是没有设置 cookie 和一些字段，所以这里我们不能直接返回了。
  // {
  //   "data": [
  //     {
  //       "url": "",
  //       "refresh_token": "",
  //       "timestamp": 0,
  //       "code": 86101,
  //       "message": "未扫码"
  //     }
  //   ]
  // }
  // 这就是我们要的信息，现在要使用同源策略给他设置上去，先试试行不行 出大事了，奶奶滴这不有吗，这不对这不对在哪啊没不对啊 现在还得返回 cookie 给前端存起来，其实这里面已经包含了信息是啊
  // Headers {
  //   "date": "Thu, 23 Jan 2025 08:24:03 GMT",
  //   "content-type": "application/json; charset=utf-8",
  //   "transfer-encoding": "chunked",
  //   "connection": "keep-alive",
  //   "expires": "Thu, 23 Jan 2025 08:24:02 GMT",
  //   "cache-control": "no-cache",
  //   "content-encoding": "br",
  //   "set-cookie": [ "SESSDATA=99fe6e70%2C1753172643%2C9b0ea%2A11CjD-AOP5W7A8guJUCKjTGMwPJxheC8eKyc2ufGQdMBaiW7FXLWLFtwA3vduuXuiGVloSVjFlZDlkNV9CTGdEWnpXVE9pQzNHSnVQRXJkRFdoTGJfT2hLV1lYTE5Vb1ZJLUVDTGtObkEweTAwVWNTVHowVlQ3Y0l4NmpSMGQyNVpPVzlWZUl6Q0tnIIEC; Path=/; Domain=bilibili.com; Expires=Tue, 22 Jul 2025 08:24:03 GMT; HttpOnly; Secure",
  //     "bili_jct=860657a44a9dae9e2b52fbc8b81d104c; Path=/; Domain=bilibili.com; Expires=Tue, 22 Jul 2025 08:24:03 GMT",
  //     "DedeUserID=302629036; Path=/; Domain=bilibili.com; Expires=Tue, 22 Jul 2025 08:24:03 GMT",
  //     "DedeUserID__ckMd5=7e19d08ca6fac464; Path=/; Domain=bilibili.com; Expires=Tue, 22 Jul 2025 08:24:03 GMT",
  //     "sid=hijz0qiv; Path=/; Domain=bilibili.com; Expires=Tue, 22 Jul 2025 08:24:03 GMT"
  //   ],
  //   "bili-status-code": "0",
  //   "bili-trace-id": "7d42d9bacf6791fc",
  //   "cpu_usage": "58",
  //   "x-bili-trace-id": "519c2bd0766ee4007d42d9bacf6791fc",
  //   "x-ticket-status": "1",
  //   "x-cache-webcdn": "BYPASS from blzone03",
  // }
}

const logout = async (queryParams: any, response: any) => {
  let resJSON: ResponseDataType = {
    code: -1,
    note: '',
    data: [],
    total: -1,
  }
  let paramStr = ''
  for (let key in queryParams) {
    let value = queryParams[key]
    paramStr += key + '=' + value + '&'
  }
  let result = await fetch('https://passport.bilibili.com/login/exit/v2?' + paramStr, {
    method: 'POST', // 指定请求方法
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Cookie': queryParams.cookie
    },
  })
  let data = await result.json()
  data = data.data || {}
  if (data.redirectUrl) {
    resJSON.code = 1
    resJSON.note = '退出登录成功'
  }
  let p = await new Promise((resolve, reject) => {
    resolve(resJSON)
  })
  response(p)
  //     .then(res => {
  //       response(res.json())
  // })
  //     .then(data => {
  //       console.log(data)
  //       if (data.redirectUrl) {
  //         resJSON.code = 1
  //         resJSON.note = '退出登录成功'
  //       }
  //     })
  //     .catch(error => console.error('Error:', error));
}

export default [
  {
    path: '/bl/login/qrcode',
    method: 'get',
    func: getQrcode,
  },
  {
    path: '/bl/login/poll',
    method: 'get',
    func: login,
  },
  {
    path: '/bl/login/exit',
    method: 'post',
    func: logout,
  },
]